/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.qp.smsmarketing.view.mbean;

import com.qp.smsmarketing.controller.ContatoController;
import com.qp.smsmarketing.controller.abstractcontroller.AbstractController;
import com.qp.smsmarketing.view.mbean.abstractmbean.AbstractMBean;
import com.qp.smsmarketing.dao.ContatoDAO;
import com.qp.smsmarketing.dao.GrupoDAO;
import com.qp.smsmarketing.entity.*;
import com.qp.smsmarketing.listagem.ListagemContato;
import com.qp.smsmarketing.view.View;
import com.qp.smsmarketing.view.ViewContato;
import com.qp.smsmarketing.view.ViewContato;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.*;

/**
 *
 * @author waldenilson
 */
public class ContatoMBean extends AbstractMBean {

    private ViewContato vContato;
    private ContatoController control = new ContatoController();
    private ContatoDAO cdao = new ContatoDAO();
    private GrupoDAO gdao = new GrupoDAO();
    private Contato cadContato = new Contato();
    private List<Contato> lista;
    private int registros;

    public void exibirView(ViewContato vg) {
        buscarCrudContato(vg);
        montarListaGrupos(vg);
        vg.getBt_novo().setEnabled(false);
        vg.getCb_ativo().setSelected(true);
        carregarView(vContato, vg);
    }

    public void novoObjeto(ViewContato vg) {
        vContato = vg;
        setCadContato(new Contato());
        vContato.getTf_nome().setText("");
        vContato.getTf_sobrenome().setText("");
        vContato.getTf_cel().setText("");
        vContato.getTf_email().setText("");
        vContato.getTf_anim().setText("");
        vContato.getCb_ativo().setSelected(true);
        vContato.getBt_novo().setEnabled(false);
        vContato.getLtGrupo().setSelectedIndices(new int[0]);
    }

    public String salvarObjeto(ViewContato vg) {
        vContato = vg;

        String retorno = "error";
        getCadContato().setNomeContato(vContato.getTf_nome().getText());
        getCadContato().setSobrenomeContato(vContato.getTf_sobrenome().getText());
        getCadContato().setSexoContato(vContato.getCb_sexo().getSelectedItem().toString());
        getCadContato().setEmailContato(vContato.getTf_email().getText());
        getCadContato().setSmsContato(vContato.getTf_cel().getText());
        getCadContato().setDataaniContato(vContato.getTf_anim().getText());
        getCadContato().setStatusContato(vContato.getCb_ativo().isSelected());

        if (vContato.getLtGrupo().isEnabled()) 
        {
            List<GrupoContato> lgc = new ArrayList<GrupoContato>();
            List<Grupo> lg = vContato.getLtGrupo().getSelectedValuesList();
            for (Grupo g : lg) 
            {
                if (g.getIdGrupo() != null) 
                {
                    GrupoContato gc1 = new GrupoContato();
                    gc1.setContatoGrupoContato(cadContato);
                    gc1.setGrupoGrupoContato(g);
                    lgc.add(gc1);
                }
            }
            getCadContato().setGrupoContatoList(lgc);
            String res = control.salvarObjeto(cadContato);
            if (res.equals("ok")) 
            {
                retorno = "ok";
            }
            else if(res.equals("vnome"))
                retorno = "vnome";
            else if(res.equals("vsobrenome"))
                retorno = "vsobrenome";
            else if(res.equals("vsms"))
                retorno = "vsms";
            else if(res.equals("vdata"))
                retorno = "vdata";
            else if(res.equals("vemail"))
                retorno = "vemail";
            
        }

        return retorno;
    }

    public void montarListaGrupos(ViewContato vc) {
    }

    public void buscarCrudContato(ViewContato vg) {
        vContato = vg;

        // buscar grupos ativos
        List<Grupo> lg = gdao.buscarTodosAtivo();
        DefaultListModel lm = new DefaultListModel();
        Grupo ga = new Grupo();
        ga.setNomeGrupo("Selecione:");
        lm.addElement(ga);
        if (!lg.isEmpty()) {
            for (Grupo g : lg) {
                lm.addElement(g);
            }
            vContato.getLtGrupo().setModel(lm);
        } else {
            vContato.getLtGrupo().setModel(lm);
        }

        lista = cdao.buscarTodos();
        int x = 0;
        for (Contato cont : lista) {
            vContato.getTableContato().setValueAt(cont.getIdContato().toString(), x, 0);
            vContato.getTableContato().setValueAt(cont.getNomeContato(), x, 1);
            vContato.getTableContato().setValueAt(cont.getSobrenomeContato(), x, 2);
            vContato.getTableContato().setValueAt(cont.getSmsContato(), x, 3);
            vContato.getTableContato().setValueAt(cont.getStatusContato(), x, 4);
            x++;
        }
        setRegistros(x);
        vContato.getBt_novo().setEnabled(true);
        //vContato.setTableContato( ocultarColuna(vContato.getTableContato(),2) );
    }

    public void buscarCrudContatoAbas(View vg) {
        lista = cdao.buscarTodos();
        int x = 0;
        for (Contato contato : lista) {
            vg.getTbContato().setValueAt(contato.getNomeContato(), x, 0);
            vg.getTbContato().setValueAt(contato.getSobrenomeContato(), x, 1);
            vg.getTbContato().setValueAt(contato.getSmsContato(), x, 2);
            vg.getTbContato().setValueAt(contato.getDataaniContato(), x, 3);
            vg.getTbContato().setValueAt(contato.getGrupoContatoList().size(), x, 4);
            vg.getTbContato().setValueAt(contato.getSexoContato(), x, 5);
            x++;
        }
        vg.getLbTotalContato().setText("Total encontrado.: " + x);
    }

    public void selecionarRegistro(ViewContato v) {
        vContato = v;
        int i = vContato.getTableContato().getSelectedRow();
        //buscarCrudContato(v);
        setRegistros(cdao.buscarTodos().size());
        if ((i + 1) <= getRegistros()) {
            getCadContato().setIdContato(
                    Integer.parseInt(vContato.getTableContato().getValueAt(i, 0).toString()));

            setCadContato((Contato) cdao.buscarRegistro(Integer.parseInt(vContato.getTableContato().getValueAt(i, 0).toString())));

            // pegar os grupos ligados ao contato
            List<GrupoContato> lgc = getCadContato().getGrupoContatoList();

            for (GrupoContato gc1 : lgc) {
                System.out.println(gc1.getGrupoGrupoContato().getNomeGrupo());
            }

            vContato.getLtGrupo().setSelectedIndices(new int[0]);
            int[] li = new int[50];
            int x = 0;
            for (GrupoContato gc : lgc) // os grupos do contato
            {
                List<Grupo> lig = new ArrayList<Grupo>(); // jlista todos grupos
                for (int ind = 0; ind < vContato.getLtGrupo().getModel().getSize(); ind++) {
                    lig.add((Grupo) vContato.getLtGrupo().getModel().getElementAt(ind));
                }

                int y = 0;
                for (Grupo g : lig) // roda a jlista
                {
                    System.out.println(g.getNomeGrupo() + " -> " + gc.getGrupoGrupoContato().getNomeGrupo());
                    if (g.getNomeGrupo().equals(gc.getGrupoGrupoContato().getNomeGrupo())) {
                        li[x] = y;
                    }
                    y++;
                }
                x++;
            }
            //vContato.getLtGrupo().setSelectedIndex(0);

            vContato.getLtGrupo().setSelectedIndices(li);

            //getCadContato().setNomeContato( vContato.getTableContato().getValueAt(i,1).toString() );

            vContato.getTf_nome().setText(getCadContato().getNomeContato());
            vContato.getTf_sobrenome().setText(getCadContato().getSobrenomeContato());
            vContato.getTf_cel().setText(getCadContato().getSmsContato());
            vContato.getTf_email().setText(getCadContato().getEmailContato());
            vContato.getTf_anim().setText(getCadContato().getDataaniContato());
            // vContato.getCb_grupos().setSelectedItem(getCadContato().getGrupoContatoList().get(0));
            vContato.getCb_sexo().setSelectedItem(getCadContato().getSexoContato());
            vContato.getCb_ativo().setSelected(getCadContato().getStatusContato());
        } else {
            novoObjeto(v);
        }
    }

    /**
     * @return the cadContato
     */
    public Contato getCadContato() {
        return cadContato;
    }

    /**
     * @param cadContato the cadContato to set
     */
    public void setCadContato(Contato cadContato) {
        this.cadContato = cadContato;
    }

    /**
     * @return the registros
     */
    public int getRegistros() {
        return registros;
    }

    /**
     * @param registros the registros to set
     */
    public void setRegistros(int registros) {
        this.registros = registros;
    }

    /**
     *
     * @param view
     * @param valor
     */
    public void filtraContatoPorNome(View view, String valor) {
        List<Contato> l = cdao.filtrarContatosPorNome(valor);
        atualizaTblContato(view, l);
        atualizaCampoPesquisa(view, valor);
    }

    /**
     *
     * @param view
     * @param celular
     */
    public void filtraContatoPorCelular(View view, String celular) {
        List<Contato> list = cdao.filtrarContatosPorCelular(celular);
        atualizaTblContato(view, list);
        atualizaCampoPesquisa(view, celular);
    }

    /**
     *
     * @param view
     * @param celular
     */
    public void filtraContatoPorAniversario(View view, String aniversario) {
        List<Contato> list = cdao.filtrarContatosPorAniversario(aniversario);
        atualizaTblContato(view, list);
        atualizaCampoPesquisa(view, aniversario);
    }

    /**
     *
     * @param view
     * @param l
     */
    public void filtraTodos(View view) {
        List<Contato> list = cdao.buscarTodos();
        atualizaTblContato(view, list);
    }

    private void atualizaTblContato(View view, List<Contato> l) {
        JTable tblContato = view.getTblContato();
        ListagemContato listagem = new ListagemContato(l);
        tblContato.setModel(listagem);
        view.getLbTotalContato().setText("Total encontrado.: " + l.size());
    }

    /**
     *
     * @param view
     * @param valor
     */
    private void atualizaCampoPesquisa(View view, String valor) {
        view.getTfpesquisarPrincipal().setText(valor);
        view.getTfpesquisarGrupos().setText(valor);
        view.getTfpesquisarMensagens().setText(valor);
        view.getTfpesquisarAgendadas().setText(valor);
        view.getTfpesquisarContatos().setText(valor);
        view.getTfpesquisarEstatisticas().setText(valor);
    }

    void filtraContatoPorGrupo(View view, String text) {
        List<Contato> list = cdao.filtrarContatosPorGrupo(text);
        atualizaTblContato(view, list);
    }
}
